package com.rs.qm.modules.member.controller;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.rs.qm.common.utils.R;
import com.rs.qm.common.utils.RedisMessageConstant;
import com.rs.qm.common.utils.RedisUtils;
import com.rs.qm.modules.member.entity.FreeUserEntity;
import com.rs.qm.modules.member.entity.LoginFormEntity;
import com.rs.qm.modules.member.service.FreeUserService;
import com.rs.qm.modules.sys.service.SysCaptchaService;
import com.rs.qm.modules.sys.service.SysUserTokenService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.Map;

@RestController
@CrossOrigin
@Slf4j
public class RegController {
    @Autowired
    private RedisUtils redisUtils;
    @Autowired
    private SysCaptchaService sysCaptchaService;
    @Autowired
    private FreeUserService freeUserService;
    @Autowired
    private SysUserTokenService sysUserTokenService;
    /**
     * 用户注册
     * @param loginFormEntity
     * @return
     */
    @PostMapping("/pc/register")
    public R register(@RequestBody LoginFormEntity loginFormEntity) {
        String telephone = loginFormEntity.getTelephone();//用户输入的手机号
        String user_Code = loginFormEntity.getValidateCode();//获取用户录入的验证码
        String jpg_Code = loginFormEntity.getJpgCode();//获取用户录入的图形验证码
        String redis_Code = redisUtils.get(telephone + RedisMessageConstant.SENDTYPE_REG);//redis保存的验证码
        String redis_JPGCode = redisUtils.get(telephone + RedisMessageConstant.SENDTYPE_JPG);//redis保存的图形验证码
        String val = redisUtils.get(telephone + RedisMessageConstant.SENDTYPE_COUNT);//redis保存的发送短信的次数
        //验证通过，根据手机号查询数据库，判断用户是否已经注册
        Wrapper<FreeUserEntity> wrapper = new EntityWrapper<FreeUserEntity>();
        //设置查询条件
        wrapper.eq("mobile", telephone);
        FreeUserEntity freeUser = freeUserService.selectOne(wrapper);
        if (freeUser != null) {
            return R.error("该手机号已经注册");
        }
        //判断验证码是否录入正确
        if (user_Code == null || redis_Code == null || !user_Code.equals(redis_Code)) {
            return R.error("验证码错误");
        }

        if (val != null && Integer.parseInt(val) >= 3) {
            //判断图形验证码是否正确
            if (jpg_Code == null || redis_JPGCode == null || !jpg_Code.equals(redis_JPGCode)) {
                return R.error("图形验证码输入错误");
            }
        }
        //走到这里说明验证通过，该手机号符合注册标准，完成注册
        FreeUserEntity freeUserEntity = new FreeUserEntity();
        freeUserEntity.setCreateTime(new Date());
        freeUserEntity.setMobile(telephone);
        freeUserEntity.setStatus(1);
        freeUserService.insert(freeUserEntity);
        //重新查询获取id
        freeUserEntity = freeUserService.selectOne(wrapper);
        Long userId = freeUserEntity.getUserId();
        //生成token
        Map<String, Object> token = sysUserTokenService.createToken(userId);
        return R.okData(token);
    }
}

